home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / text / print / printduplex10.lha / PrintDuplex.doc < prev    next >
Text File  |  1993-01-16  |  8KB  |  202 lines

  1.  
  2. Program:        PrintDuplex V 1.0.0
  3. Last Change:    01/16/93
  4. Author:         Mark R. Rinfret, MRsoftware
  5.  
  6. Mumbo-Jumbo
  7.  
  8. PrintDuplex is freely distributable but is Copyright © MRsoftware.  It
  9. is not in the public domain and may not be distributed with commercial
  10. software without prior written permission nor may any fee be charged
  11. for its use, other than reasonable duplication and distribution fees.
  12. PrintDuplex is provided as-is and MRsoftware makes no warrantees,
  13. either explicit or implicit with regard to its use.
  14.  
  15.  
  16. Introduction
  17.  
  18. PrintDuplex is an Amiga utility which will print PostScript or ASCII
  19. text files to a laser printer or printer with single-sheet capability,
  20. two pages per sheet.  It will not work with printers which rely on
  21. continous forms.  PrintDuplex has a fairly naive notion of a document:
  22. a stream of pages numbered 1-N where N is an even number.  You can
  23. print documents having an odd number of pages.  PrintDuplex will
  24. supply the "missing" (blank) page.
  25.  
  26. A late addition to PrintDuplex is the ability to handle "n-up"
  27. PostScript documents created with such programs as PSPrint, A2PS, etc.
  28. Though this worked with the few samples I tried, there may be problems
  29. with more complex documents.  Please let me know if you have a problem
  30. and, if possible, send me a copy of the document which revealed the
  31. problem.
  32.  
  33. I wrote PrintDuplex because I had to output a large Professional Page
  34. 3.0 document to my laser printer in two-sided format and doing so from
  35. within Professional Page (via an ARexx script) proved to be quite
  36. unfriendly to the rest of my system.  By directing the PostScript
  37. output to a file, the Pro Page printing operation must only be
  38. performed once (per revision of the document) and PrintDuplex can
  39. generate as many hardcopies as are needed while placing much less of a
  40. burden on my system.  I've successfully used PrintDuplex with
  41. PostScript files generated by Professional Page and New Horizons'
  42. ProWrite and quite a few plain (non-PostScript ASCII) documents.
  43.  
  44.  
  45. Using PrintDuplex
  46.  
  47. The command synopsis for PrintDuplex is:
  48.  
  49.     PrintDuplex [options] From <input_file> To <output_file>
  50.  
  51. and the AmigaDOS command template is:
  52.  
  53.     First/K/N,Last/K/N,Front/S,Back/S,Layout/K/N,ASCII/S,Lines/K/N,
  54.     Copies/K/N,From/A,To/A
  55.  
  56. where <input_file> is the name of the text file containing PostScript
  57. or plain ASCII text to be printed and <output_file> is the name of the
  58. file or device (e.g.  PRT:, PAR:) to receive the output.  When
  59. PrintDuplex is started, it first scans the entire <input_file>,
  60. determining page boundaries.  It then prompts you for confirmation to
  61. proceed with the printing of first the front side, then the back side.
  62. Be sure that the printer is in the ready state BEFORE confirming that
  63. you are ready to print either page group.  In particular, after the
  64. front side is printed, you'll have to remove the printed pages from
  65. the output tray, juggle them a bit to get an even stack, then place
  66. them back in the input tray, usually top-in, unprinted side up.
  67.  
  68. The [ options ] may be none or any of the following, in any order:
  69.  
  70. ASCII
  71. The file contains only ASCII text.  Do not attempt to interpret it as
  72. a PostScript file (default format is PostScript).  Pagination is
  73. accomplished by a combination of form-feed detection and line-counting
  74. (see Lines).
  75.  
  76. Copies <count>
  77. Specifies the number of copies to be printed.
  78.  
  79. First  <page_number>
  80. Specifies the first <page_number> to be printed.  The <page_number> is
  81. currently restricted to an odd value (1, 3, 5, etc.).
  82.  
  83. Last <page_number>
  84. Specifies the last <page_number> to be printed.  The <page_number> is
  85. currently restricted to an even value (2, 4, 6, etc.).
  86.  
  87. Lines <number> 
  88. This option sets the number of lines per page to <number> and is only
  89. relevant when the ASCII option is enabled.  If the file is known to be
  90. paginated with form-feeds, make sure that <number> is at least as
  91. large as the lines-per-page setting used when the file was formatted
  92. (otherwise, you'll end up with a series of alternating long and short
  93. pages).
  94.  
  95. Front
  96. Print only the front-side pages in the selected range.
  97.  
  98. Back
  99. Print only the back-side pages in the selected range.
  100.  
  101. Layout <pages_per_page>
  102. This option is useful for printing the output of certain programs
  103. which have "n-up" capability (printing multiple logical pages per
  104. physical page), such as PSPrint, A2PS, etc. The <pages_per_page>
  105. value MUST match the value that was used by the originating program
  106. or you're guaranteed to get wierd results. This feature was added
  107. very late in the game. I hope it works consistently.
  108.  
  109.  
  110. Postscript Printing
  111.  
  112. A little empirical analysis of a PostScript text file output by Pro
  113. Page (I'm not all that knowledgeable with regard to PostScript )
  114. revealed that it consisted of the following structure:
  115.  
  116.     prologue
  117.     %%Page: <lpn> <ppn> (<lpn> <ppn> = logical, physical page number)
  118.     ...page "program"
  119.        .
  120.        .
  121.        .
  122.     %%Page: <lpn> <ppn>
  123.     ...page "program"
  124.     epilogue
  125.  
  126. where <lpn> is the logical page number and <ppn> is the physical page
  127. number.  By partitioning the file into its components, the text can be
  128. sent to the printer (or a file) in the correct order.  This order is:
  129.  
  130.     prologue, 1, 3, ..., N-1 epilogue
  131.     (reload the paper tray)
  132.     prologue, N, N-2, ..., 2, epilogue
  133.  
  134. I decided to send the prologue and epilogue before/after each side
  135. after experiencing some strange problems with my printer.  This may
  136. not have been the best fix, but it solved the immediate problem.
  137.  
  138. The determination of the start and end of each PostScript page isn't
  139. quite as straightforward as it should be since (I think) the available
  140. tools don't all output the "same" PostScript :-).  PrintDuplex doesn't
  141. have any real PostScript parsing prowess.  The file is scanned
  142. primarily for %%Page comments.  All text preceding the first %%Page
  143. comment is considered to be the prologue.  The file is then scanned
  144. for 'showpage' commands (currently, they must appear in column 1,
  145. though that is not a PostScript requirement).  The showpage command
  146. tentatively marks the end of a page unless a %%Page comment is found
  147. beyond it.  Thus, the epilogue is comprised of all the text that
  148. follows the last showpage command.
  149.  
  150. ASCII Text Printing
  151.  
  152. ASCII text files are split into pages through the use of an arbitrary
  153. line count (the default is 60 but can be overridden with the Lines
  154. option) or through the detection of form feed characters (decimal 12)
  155. embedded within the text.  These work together to determine the page
  156. boundaries.
  157.  
  158.  
  159. Pros, Cons and Considerations
  160.  
  161. Duplex printing obviously saves paper and reduces the volume of your
  162. printed documents.  On the down side, if you have a finicky printer,
  163. you may find that it jams the paper when it is reloaded.  This is
  164. largely dependent upon the quality of your paper, how much your
  165. printer distorts the paper as it prints to it, humidity, temperature,
  166. phase of the moon, etc.  Readability may be a problem if you're using
  167. a lightweight paper.  The print may show through to the opposite side,
  168. which can be quite distracting.  Experiment with your setup and a
  169. small document to determine if duplex printing is feasible for you.
  170. Use the First/Last options to print a subset of the document until you
  171. get it right.  Your printer manufacturer may have provided suggestions
  172. for two-sided printing in your owner's manual.  For example, Panasonic
  173. KXP-4455 owners are advised to use the bottom paper tray.
  174.  
  175.  
  176.  
  177. Additional Program Info
  178.  
  179. PrintDuplex is my first complete C++ programming exercise and was
  180. programmed with Comeau C++ 3.0b with Templates in conjunction with
  181. SAS/C 6.1.  The experience was enjoyable, frustrating, illuminating,
  182. and convinced me that C++ offers a better way to craft programs.  I
  183. was actually quite surprised at how easily it integrates with the
  184. AmigaDOS/Intuition environment.  I hadn't intended to add any GUI
  185. features for the first release.  However, rolling a class "around"
  186. EasyRequest was so, ah, easy, that I couldn't resist.
  187.  
  188. Feedback?
  189.  
  190. Please send bug reports and enhancement requests to:
  191.  
  192.     BIX:    markr
  193.     Usenet: mrr@mrsoft.network23.com
  194.  
  195. PrintDuplex is freeware.  However, if you feel strongly motivated to
  196. send a small donation, I'll happily accept it.  Send all
  197. correspondence to:
  198.  
  199.     MRsoftware
  200.     348 Indian Avenue
  201.     Portsmouth, RI  02871
  202.